#include "bsp_dap_io.h"

void bsp_dap_io_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* CLK 配置 */
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOD_CLK_ENABLE();

    // Enable USB connect pin
    __HAL_RCC_AFIO_CLK_ENABLE();
    // Disable JTAG to free pins for other uses
    // Note - SWD is still enabled
    __HAL_AFIO_REMAP_SWJ_NOJTAG();

    USB_CONNECT_PORT_ENABLE();
    USB_CONNECT_OFF();
    GPIO_InitStructure.Pin = USB_CONNECT_PIN;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    HAL_GPIO_Init(USB_CONNECT_PORT, &GPIO_InitStructure);

    /* gpio 配置 */
    HAL_GPIO_WritePin(DAP_STATE_LED_GPIO_TYPE, DAP_STATE_LED_GPIO_PIN, GPIO_PIN_SET); // USB-LED指示灯
    GPIO_InitStructure.Pin = DAP_STATE_LED_GPIO_PIN;
    GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    HAL_GPIO_Init(DAP_STATE_LED_GPIO_TYPE, &GPIO_InitStructure);

    HAL_GPIO_WritePin(DAP_nRESET_GPIO_TYPE, DAP_nRESET_GPIO_PIN, GPIO_PIN_SET); // nRESET烧录芯片复位引脚
    GPIO_InitStructure.Pin = DAP_nRESET_GPIO_PIN;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(DAP_nRESET_GPIO_TYPE, &GPIO_InitStructure);

    delay_sw_ms(85);
}
